home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / TEECHART / DELPHI3.EXE / %MAINDIR% / Examples / Delphi3 / ISAPI CGI and TeeChart / UnitChart.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-11-17  |  6.5 KB  |  207 lines

  1. unit UnitChart;
  2.  
  3. interface
  4.  
  5. { This unit configures a Chart1 component with the parameters
  6.   passed to the WebModule ISAPI dll.
  7.  
  8.   See the TeeISAPI.htm page parameters.
  9. }
  10. uses
  11.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  12.   ExtCtrls, TeeProcs, TeEngine, Chart, Series, StdCtrls,
  13.   { added units... }
  14.   JPEG, HTTPApp;
  15.  
  16. type
  17.   TForm2 = class(TForm)
  18.     Chart1: TChart;
  19.     Series1: TPieSeries;
  20.     Label1: TLabel;
  21.     procedure FormCreate(Sender: TObject);
  22.   private
  23.     { Private declarations }
  24.   public
  25.     { Public declarations }
  26.     Function ChartToJPEG(Request:TWebRequest):TJPEGImage;
  27.   end;
  28.  
  29. implementation
  30.  
  31. {$R *.DFM}
  32.  
  33. { Add some sample values... }
  34. procedure TForm2.FormCreate(Sender: TObject);
  35. begin
  36.   With Series1 do
  37.   begin
  38.     Clear;
  39.     Add( 143450, 'USA',       clBlue );
  40.     Add( 128950, 'Europe',    clGreen );
  41.     Add(  64345, 'Australia', clRed );
  42.     Add(  34589, 'Asia',      clYellow );
  43.     Add(   7111, 'Africa',    clWhite );
  44.   end;
  45. end;
  46.  
  47. { This function creates a TJPEGImage and draws a TeeChart on it }
  48. Function GetChartJPEG(AChart:TCustomChart; Params:TJPEGDefaults):TJPEGImage;
  49. var tmpBitmap:TBitmap;
  50. begin
  51.   result:=TJPEGImage.Create;   { <-- create a TJPEGImage }
  52.   tmpBitmap:=TBitmap.Create;   { <-- create a temporary TBitmap }
  53.   try
  54.     tmpBitmap.Width :=AChart.Width;   { <-- set the bitmap dimensions }
  55.     tmpBitmap.Height:=AChart.Height;
  56.     { draw the Chart on the temporary Bitmap... }
  57.     AChart.Draw(tmpBitmap.Canvas,Rect(0,0,tmpBitmap.Width,tmpBitmap.Height));
  58.     { set the desired JPEG options... }
  59.     With result do
  60.     begin
  61.       GrayScale            :=Params.GrayScale;
  62.       ProgressiveEncoding  :=Params.ProgressiveEncoding;
  63.       CompressionQuality   :=Params.CompressionQuality;
  64.       PixelFormat          :=Params.PixelFormat;
  65.       ProgressiveDisplay   :=Params.ProgressiveDisplay;
  66.       Performance          :=Params.Performance;
  67.       Scale                :=Params.Scale;
  68.       Smoothing            :=Params.Smoothing;
  69.       { Copy the temporary Bitmap onto the JPEG image... }
  70.       Assign(tmpBitmap);
  71.     end;
  72.   finally
  73.     tmpBitmap.Free;  { <-- free the temporary Bitmap }
  74.   end;
  75. end;
  76.  
  77. { Get the HTML parameters and change the Chart... }
  78. Function TForm2.ChartToJPEG(Request:TWebRequest):TJPEGImage;
  79.  
  80.   Function GetBoolField(Const AField:String):Boolean;
  81.   begin
  82.     result:=Uppercase(Request.ContentFields.Values[AField])=Uppercase(AField);
  83.   end;
  84.  
  85.   Procedure PrepareChart(AChart:TCustomChart);
  86.  
  87.     Function GetRequestSeriesType:TChartSeriesClass;
  88.     var tmpSt:String;
  89.     begin
  90.       result:=TPieSeries;
  91.       tmpSt:=Uppercase(Request.ContentFields.Values['type']);
  92.       if tmpSt='BAR'      then result:=TBarSeries else
  93.       if tmpSt='HORIZBAR' then result:=THorizBarSeries else
  94.       if tmpSt='LINE'     then result:=TLineSeries else
  95.       if tmpSt='AREA'     then result:=TAreaSeries else
  96.       if tmpSt='PIE'      then result:=TPieSeries else
  97.       if tmpSt='POINT'    then result:=TPointSeries else
  98.       if tmpSt='FASTLINE' then result:=TFastLineSeries;
  99.     end;
  100.  
  101.     Procedure AddDataToSeries;
  102.     var t:Integer;
  103.         tmpLabel,
  104.         tmpValue:String;
  105.     begin
  106.       AChart.Series[0].Clear;
  107.       for t:=1 to 100 do  { max number of points for this example }
  108.       begin
  109.         tmpLabel:=Request.ContentFields.Values['text'+IntToStr(t)];
  110.         tmpValue:=Request.ContentFields.Values['value'+IntToStr(t)];
  111.         if tmpValue='' then
  112.            break
  113.         else
  114.            AChart.Series[0].Add(StrToFloat(tmpValue),tmpLabel,clTeeColor);
  115.       end;
  116.     end;
  117.  
  118.     Procedure ChangeMarkStyle;
  119.     var tmpSt:String;
  120.     begin
  121.       tmpSt:=Uppercase(Request.ContentFields.Values['mark']);
  122.       With AChart.Series[0].Marks do
  123.       if tmpSt='VALUE'   then Style:=smsValue else
  124.       if tmpSt='PERCENT' then Style:=smsPercent else
  125.       if tmpSt='LABEL'   then Style:=smsLabel;
  126.     end;
  127.  
  128.     Procedure ChangeLegendStyle;
  129.     var tmpSt:String;
  130.     begin
  131.       tmpSt:=Uppercase(Request.ContentFields.Values['legendstyle']);
  132.       With AChart.Legend do
  133.       if tmpSt='VALUE'   then TextStyle:=ltsLeftValue else
  134.       if tmpSt='PERCENT' then TextStyle:=ltsLeftPercent else
  135.       if tmpSt='LABEL'   then TextStyle:=ltsPlain;
  136.     end;
  137.  
  138.     Procedure ChangeLegendPosition;
  139.     var tmpSt:String;
  140.     begin
  141.       tmpSt:=Uppercase(Request.ContentFields.Values['legendposition']);
  142.       With AChart.Legend do
  143.       if tmpSt='LEFT'   then Alignment:=laLeft else
  144.       if tmpSt='RIGHT'  then Alignment:=laRight else
  145.       if tmpSt='TOP'    then Alignment:=laTop else
  146.       if tmpSt='BOTTOM' then Alignment:=laBottom;
  147.     end;
  148.  
  149.     Procedure ChangeBarStyle;
  150.     var tmpSt:String;
  151.     begin
  152.       tmpSt:=Uppercase(Request.ContentFields.Values['barstyle']);
  153.       With AChart[0] as TCustomBarSeries do
  154.       if tmpSt='RECTANGLE'    then BarStyle:=bsRectangle else
  155.       if tmpSt='PYRAMID'      then BarStyle:=bsPyramid else
  156.       if tmpSt='INVPYRAMID'   then BarStyle:=bsInvPyramid else
  157.       if tmpSt='CYLINDER'     then BarStyle:=bsCilinder else
  158.       if tmpSt='ELLIPSE'      then BarStyle:=bsEllipse else
  159.       if tmpSt='ARROW'        then BarStyle:=bsArrow else
  160.       if tmpSt='RECTGRADIENT' then BarStyle:=bsRectGradient;
  161.     end;
  162.  
  163.   begin
  164.     ChangeAllSeriesType(AChart,GetRequestSeriesType);
  165.     AddDataToSeries;
  166.     ChangeMarkStyle;
  167.     ChangeLegendStyle;
  168.     ChangeLegendPosition;
  169.     if AChart[0] is TCustomBarSeries then ChangeBarStyle;
  170.  
  171.     With AChart do
  172.     begin
  173.       Series[0].Marks.Visible:=GetBoolField('MARKS');
  174.       Legend.Visible:=GetBoolField('LEGEND');
  175.  
  176.       Title.Text.Clear;
  177.       Title.Text.Add(Request.ContentFields.Values['titletext']);
  178.  
  179.       Title.Visible:=GetBoolField('TITLE');
  180.       Gradient.Visible:=GetBoolField('GRADIENT');
  181.  
  182.       Chart3DPercent:=StrToInt(Request.ContentFields.Values['percent3D']);
  183.     end;
  184.   end;
  185.  
  186. var Params:TJPEGDefaults;
  187. begin
  188.   PrepareChart(Chart1);  { <-- change Chart properties }
  189.  
  190.   { Create the JPEG image parameters }
  191.   With Params do
  192.   begin
  193.     GrayScale:=  GetBoolField('grayscale');
  194.     ProgressiveEncoding:=False;
  195.     CompressionQuality:=  StrToInt(Request.ContentFields.Values['jpegquality']);
  196.     PixelFormat:=jf24bit;
  197.     ProgressiveDisplay:=True;
  198.     Performance:=jpBestQuality;
  199.     Scale:=jsFullSize;
  200.     Smoothing:=False;
  201.   end;
  202.   { Create and return the JPEG component with the Chart image }
  203.   result:=GetChartJPEG(Chart1,Params);
  204. end;
  205.  
  206. end.
  207.